Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(form): fixed dynamic rendering of form default data #3145

Merged
merged 11 commits into from
Oct 31, 2024

Conversation

l123wx
Copy link
Contributor

@l123wx l123wx commented Oct 17, 2024

🤔 这个 PR 的性质是?

  • 日常 bug 修复
  • 新特性提交
  • 文档改进
  • 演示代码改进
  • 组件样式/交互改进
  • CI/CD 改进
  • 重构
  • 代码风格优化
  • 测试用例
  • 分支合并
  • 其他

🔗 相关 Issue

#3076

💡 需求背景和解决方案

由于 Form 没有维护 formData 来管理表单的数据,而是直接使用 FormItem 中的 state 来记录,所以对于动态条件渲染的组件,如果使用 setFieldsValue 同时设置:1. 涉及判断条件的 fieldValue,2. 暂未渲染出来的 formItem 的值,结果跟用户的预期不一致。

所以在 Form 中创建了一个 游离值 formData,来记录这种临时的值。因为这类值预期是要被设置到对应组件上的,但是由于组件还没渲染,它们还没找到自己的归属,所以把它们叫做游离值(floatingFormData)哈哈

当使用 setFieldsValue 设置值时,会判断设置值对应的 FormItem 组件存不存在,如果不存在,就会把值记录到 FormItem 组件中。如果 组件不存在,但是游离值中已经有这个值了,会更新这个游离值。

当组件渲染时,会判断是否存在游离值,如果存在,则设置为组件的 initialData,优先级最高。当游离值被使用过后,会从游离
formData 中删除。

📝 更新日志

  • fix(Form): 修复了动态渲染表单无法使用 setFieldsValue 预设数据的问题

  • 本条 PR 不需要纳入 Changelog

☑️ 请求合并前的自查清单

⚠️ 请自检并全部勾选全部选项⚠️

  • 文档已补充或无须补充
  • 代码演示已提供或无须提供
  • TypeScript 定义已补充或无须补充
  • Changelog 已提供或无须提供

Copy link
Contributor

github-actions bot commented Oct 17, 2024

完成

@l123wx l123wx changed the title chore(form): fixed variable naming misspellings fix(form): fixed dynamic rendering of form default data Oct 17, 2024
@uyarn
Copy link
Collaborator

uyarn commented Oct 17, 2024

@HaixingOoO @honkinglin 一起看看呢

@HaixingOoO
Copy link
Collaborator

@HaixingOoO @honkinglin 一起看看呢

@uyarn
Copy link
Collaborator

uyarn commented Oct 18, 2024

@l123wx 需要解决下冲突再更新下快照

@liweijie0812
Copy link
Collaborator

/update-snapshot

Copy link
Contributor

⏳ 正在运行快照更新。。。 CI: Open

@l123wx
Copy link
Contributor Author

l123wx commented Oct 18, 2024

@uyarn 是要合并一下主分支的代码吗

第一次给这个仓库提pr,不太清楚流程,不好意思😂

@uyarn
Copy link
Collaborator

uyarn commented Oct 19, 2024

@l123wx 嗯 不过上面已经通过机器人已经更新好了

@uyarn
Copy link
Collaborator

uyarn commented Oct 19, 2024

/update-common

@uyarn uyarn merged commit 476dd87 into Tencent:develop Oct 31, 2024
7 checks passed
@github-actions github-actions bot mentioned this pull request Oct 31, 2024
16 tasks

nameLists.forEach((nameList) => {
const fieldValue = get(fields, nameList);
const formItemRef = formMapRef.current.get(nameList.length > 1 ? nameList : nameList[0]);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个地方这样处理会用问题,多级name的key是个数组,数组内存不一样 get的方式会取不到 导致对多级name setFieldValues 会失败

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants